/**
 * Project Name:SimonFramework
 * File Name:LogUtils.java
 * Package Name:com.simon.framework.utils
 * Date:2016-5-19 下午2:23:10
 * Copyright (c) 2016, simon@cmonbaby.com All Rights Reserved.
 */
package com.cmonbaby.images.utils;

import android.text.TextUtils;
import android.util.Log;

/**
 * <strong>自定义LogCat打印输出工具</strong>
 * <ul>
 * <strong>Default Config</strong>
 * <li>boolean isDeBug = true</li>
 * <li>String TAG = "com.simon >>>>>>"</li>
 * </ul>
 * <ul>
 * <strong>Use Method</strong>
 * <li>{@link #i(String)}</li>
 * <li>{@link #v(String)}</li>
 * <li>{@link #d(String)}</li>
 * <li>{@link #e(String)}</li>
 * <li>{@link #i(String, String)}</li>
 * <li>{@link #v(String, String)}</li>
 * <li>{@link #d(String, String)}</li>
 * <li>{@link #e(String, String)}</li>
 * </ul>
 *
 * <p>Author:      Simon
 * <p>QO:          8950764
 * <p>Email:       simon@cmonbaby.com
 * <p>WebSize:     https://www.cmonbaby.com
 * <p>Version:     1.0.0
 * <p>Date:        2020/12/29
 */
public class LogUtils {

    public static boolean isDeBug = false;
    private static final String TAG = "simon.image >>> ";

    private LogUtils() { // 不能初始化
		/* cannot be instantiated */
        throw new UnsupportedOperationException("cannot be instantiated");
    }

    private static String generateTag() {
        StackTraceElement caller = new Throwable().getStackTrace()[2];
        String tag = "%s.%s(L:%d)";
        String callerClazzName = caller.getClassName();
        callerClazzName = callerClazzName.substring(callerClazzName.lastIndexOf(".") + 1);
        tag = String.format(tag, callerClazzName, caller.getMethodName(), caller.getLineNumber());
        tag = TextUtils.isEmpty(TAG) ? tag : TAG + ":" + tag;
        return tag;
    }

    /**
     * LogCatg打印输出 (默认标签：TAG)
     * @param msg 信息
     */
    public static void i(String msg) {
        if (isDeBug) {
            Log.i(TAG, TextUtils.isEmpty(msg) ? "打印信息为：null" : msg);
        }
    }

    /**
     * LogCatg打印输出 (默认标签：TAG)
     * @param msg 信息
     */
    public static void v(String msg) {
        if (isDeBug) {
            Log.v(TAG, TextUtils.isEmpty(msg) ? "打印信息为：null" : msg);
        }
    }

    /**
     * LogCatg打印输出 (默认标签：TAG)
     * @param msg 信息
     */
    public static void d(String msg) {
        if (isDeBug) {
            Log.d(TAG, TextUtils.isEmpty(msg) ? "打印信息为：null" : msg);
        }
    }

    /**
     * LogCatg打印输出 (默认标签：TAG)
     * @param msg 信息
     */
    public static void e(String msg) {
        if (isDeBug) {
            Log.e(TAG, TextUtils.isEmpty(msg) ? "打印信息为：null" : msg);
        }
    }

    /**
     * LogCatg打印输出
     * @param tag 标签
     * @param msg 信息
     */
    public static void i(String tag, String msg) {
        if (isDeBug) {
            Log.i(TextUtils.isEmpty(tag) ? TAG : tag, TextUtils.isEmpty(msg) ? "打印信息为：null" : msg);
        }
    }

    /**
     * LogCatg打印输出
     * @param tag 标签
     * @param msg 信息
     */
    public static void d(String tag, String msg) {
        if (isDeBug) {
            Log.d(TextUtils.isEmpty(tag) ? TAG : tag, TextUtils.isEmpty(msg) ? "打印信息为：null" : msg);
        }
    }

    /**
     * LogCatg打印输出
     * @param tag 标签
     * @param msg 信息
     */
    public static void v(String tag, String msg) {
        if (isDeBug) {
            Log.v(TextUtils.isEmpty(tag) ? TAG : tag, TextUtils.isEmpty(msg) ? "打印信息为：null" : msg);
        }
    }

    /**
     * LogCatg打印输出
     * @param tag 默认
     * @param msg 信息
     */
    public static void e(String tag, String msg) {
        if (isDeBug) {
            Log.e(TextUtils.isEmpty(tag) ? TAG : tag, TextUtils.isEmpty(msg) ? "打印信息为：null" : msg);
        }
    }

    public static void i(String content, Throwable tr) {
        if (isDeBug) {
            String tag = generateTag();
            Log.i(tag, content, tr);
        }
    }

    public static void d(String content, Throwable tr) {
        if (isDeBug) {
            String tag = generateTag();
            Log.d(tag, content, tr);
        }
    }

    public static void v(String content, Throwable tr) {
        if (isDeBug) {
            String tag = generateTag();
            Log.v(tag, content, tr);
        }
    }

    public static void w(String content, Throwable tr) {
        if (isDeBug) {
            String tag = generateTag();
            Log.w(tag, content, tr);
        }
    }

    public static void e(String content, Throwable tr) {
        if (isDeBug) {
            String tag = generateTag();
            Log.e(tag, content, tr);
        }
    }

}

